网易 2017 春招笔试编程题

消除重复元素

题目描述

小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。

输入包括两行:

第一行为序列长度n(1 ≤ n ≤ 50)。

第二行为n个数sequencei,以空格分隔。

输入例子:

9

100 100 100 99 99 99 100 100 100

输出消除重复元素之后的序列,以空格分隔,行末无空格。

输出例子:

99 100

思路

输入是一个可能包含有多个重复元素的数组(inputArr):

  1. 用一个数组(noRepeatArr)存储输入数组中独立的元素,就是一个输入数组去重的过程;

  2. 将所有元素最后出现的索引值存在一个数组中(index),用到 arr.lastIndexOf(element) 方法;

  3. 将 index 数组从小到大排序,按排好序的索引值从输入数组中取出相应元素即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function findLastPosition(inputArr) {
var noRepeatArr = [];
var inputLen = inputArr.length;
var index = [];
var outputArr = [];
for (var i = 0; i < inputLen; i++) {
if (noRepeatArr.indexOf(inputArr[i])==-1) { // noRepeat中没有该元素
noRepeatArr.push(inputArr[i]);
}
}
for (var j = 0; j < noRepeatArr.length; j++) {
index.push(inputArr.lastIndexOf(noRepeatArr[j]));
}
index.sort(function(a,b) {
return a-b;
});
for (var k = 0; k < index.length; k++) {
outputArr.push(inputArr[index[k]]);
}
return outputArr;
}

奇怪的表达式求值

题目描述

常规的表达式求值,我们都会根据计算的优先级来计算。比如 / 的优先级就高于 + -。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有 /,只有+,- 和 。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少。

输入为一行字符串,即一个表达式。其中运算符只有 -,+,*。参与计算的数字只有 0-9。

输出一个数,即表达式的值。

输入例子:

3+5*7

输出例子:

56

思路

考虑到数字只有0-9,先取出字符串的前三个字符(str.substring),计算出这三个字符的值(eval函数),然后再用一个循环每次取后两个字符加入计算。

代码

1
2
3
4
5
6
7
function strangeExpression(inputExpStr) {
var result = eval(inputExpStr.substring(0,3));
for (var i = 3; i < inputExpStr.length; i+=2) {
result = eval(result + inputExpStr.substring(i,i+1));
}
return result;
}

集合

题目描述

小易最近在数学课上学习到了集合的概念,集合有三个特征:1. 确定性;2. 互异性;3. 无序性。

小易的老师给了小易这样一个集合:
S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z }

需要根据给定的w,x,y,z,求出集合中一共有多少个元素。小易才学习了集合还解决不了这个复杂的问题,需要你来帮助他。

输入包括一行:
一共4个整数分别是w(1 ≤ w ≤ x),x(1 ≤ x ≤ 100),y(1 ≤ y ≤ z),z(1 ≤ z ≤ 100),以空格分隔。

输出描述:输出集合中元素的个数。

输入例子:

1 10 1 1

输出例子:

10

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function eleNumInSet(w,x,y,z) {
var sAll = [];
var s = [];
for (var i = w; i <= x; i++) { // p 集合
for (var j = y; j <= z; j++) { // q 集合
sAll.push(i/j);
}
}
// 去重
for (var k = 0; k < sAll.length; k++) {
if (s.indexOf(sAll[k])==-1) {
s.push(sAll[k]);
}
}
return s.length;
}
Fork me on GitHub